package com.aabte.design2.creational.builder;

/**
 * 主管只负责按照特定顺序执行生成步骤。其在根据特定步骤或配置来生成产品时
 * 会很有帮助。由于客户端可以直接控制生成器，所以严格意义上来说，主管类并
 * 不是必需的
 *
 * @author Daniel
 * @version 1.0
 * @date 2020/5/2
 */
public class Director {
    private Builder builder;

    /**
     * 主管可同由客户端代码传递给自身的任何生成器实例进行交互。客户端可通
     * 过这种方式改变最新组装完毕的产品的最终类型。
     */
    public void setBuilder(Builder builder) {
        this.builder = builder;
    }

    /**
     * 主管可使用同样的生成步骤创建多个产品变体。
     */
    void constructSportsCar() {
        builder.reset();
        builder.seats(2);
        builder.engine(SportEngine.builder().name("sport").build());
        builder.tripComputer(true);
        builder.GPS(true);
    }

}
